package com.julius.design.suanfa.search;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * @author julius
 * @date 2021-10-25 上午 11:10
 * <p>
 *     查找字符串中第一个不重复的字符
 *     不要总是走老路，换个思考的方向
 *     https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/
 * </p>
 */
public class FindUniqChar {

    public static char firstUniqChar(String s) {
        if(s == null || s.length() == 0){
            return ' ';
        }

        //换个思路，因为全部是小写字母，所以可以根据索引位置去查询
        int index = Integer.MAX_VALUE;
        char ans = ' ';
        for (char i = 'a';i <= 'z';i++){
            //返回字母在字符串中的第一个位置索引，不存在返回-1
            int temp = s.indexOf(i);
            if(temp != -1 && temp == s.lastIndexOf(i)){
                //字符存在，并且只有一个，进行交换
                if(index >= temp){
                    ans = i;
                    index = temp;
                }
            }
        }
        return ans;
//        Map<Character,Integer> map = new HashMap<>(1<<4);
//        Set<Character> set = new HashSet<>();
//        //去除重复的
//        for(int i = 0;i < s.length();i++){
//            if(!set.add(s.charAt(i))){
//                map.remove(s.charAt(i));
//                continue;
//            }
//            map.put(s.charAt(i),i);
//        }
//        if(map.size() == 0){
//            return ' ';
//        }
//        //找出索引最小的
//        Character temp = ' ';
//        int tempIndex = s.length();
//        for (Map.Entry<Character,Integer> entry : map.entrySet()){
//            Character key = entry.getKey();
//            Integer value = entry.getValue();
//            if(value >= tempIndex){
//                continue;
//            }
//            temp = key;
//            tempIndex = value;
//        }
//
//        return temp;
    }

    public static void main(String[] args) {
        System.out.println(firstUniqChar("leetcode"));
    }
}
